## Задача 1 Имеется список книг в формате:

```
Отцы и дети; Тургенев; 2024
Война и мир; Толстой; 2001
Братья Карамазовы; Достоевский; 1954
Война и мир; Толстой; 2022
Братья Карамазовы; Достоевский; 2024
Война и мир; Толстой; 1972
```
Каждая строка содержит информацию об книге в формате:

"Название; автор; год издания"


Необходимо каждую из этих строк представить объектом класса `BookStudy`, которые создаются командой:

```python
bs = BookStudy(name, author, year)
```

где

`name` - название пособия (строка); 
`author` - автор пособия (строка); 
`year` - год издания (целое число). 

Такие же публичные локальные атрибуты должны быть в объектах класса `BookStudy`.

Для каждого объекта реализовать вычисление хэша по двум атрибутам:

 `name` и `author` (без учета регистра).

Сформировать список из объектов класса `BookStudy` на основе прочитанных строк. 
После этого определить вывести  книги с уникальными хэшами. 

```
Книга: "Отцы и дети" автор: Тургенев
Книга: "Война и мир" автор: Толстой
Книга: "Братья Карамазовы" автор: Достоевский
```
 
## Задача 2 Объявите класс с именем Dimensions, объекты которого создаются командой:


> d = Dimensions(a, b, c)

где:
> a, b, c - положительные числа (целые или вещественные), описывающие габариты некоторого тела: `высота, ширина и глубина`.

Каждый объект класса `Dimensions` должен иметь аналогичные публичные атрибуты `a, b, c` (с соответствующими числовыми значениями). 

Также для каждого объекта должен вычисляться хэш на основе всех трех габаритов: `a, b, c`.

Имеется строка, записанная в формате:

`a1 b1 c1; a2 b2 c2; ... ;aN bN cN`

Например:


> 1 2 3; 4 5 6.78; 1 2 3; 0 1 2.5

Если какой-либо габарит оказывается отрицательным значением или равен нулю, то при создании объектов должна генерироваться ошибка командой:

```python
raise ValueError("габаритные размеры должны быть положительными числами")
```

Сформируйте на основе прочитанной строки список из объектов класса `Dimensions`. 

После этого отсортируйте этот список по возрастанию (неубыванию) хэшей этих объектов так, чтобы объекты с равными хэшами стояли друг за другом.


 ## Задача 3
 
 Объявите класс с именем `ShopItem (товар)`, объекты которого создаются командой:

```python
item = ShopItem(name, weight, price)
```
где 

* `name` - название товара (строка);

* `weight` - вес товара (число: целое или вещественное);

* `price` - цена товара (число: целое или вещественное).

Определите в этом классе магические методы:

`__hash__()` - чтобы товары с одинаковым названием (без учета регистра), весом и ценой имели бы равные хэши;

`__eq__()` - чтобы объекты с одинаковыми хэшами были равны.

данные взять из строки:

```
Системный блок: 1500 75890.56
Монитор Samsung: 2000 34000
Клавиатура: 200.44 545
Монитор Samsung: 2000 34000
```
Товары в этом списке могут совпадать.

Необходимо для всех этих строчек сформировать соответствующие объекты класса `ShopItem` и добавить в словарь с именем `shop_items`. 

Ключами словаря должны выступать сами объекты, а значениями - список в формате:

```python
[item, total]
```
где `item` - объект класса `ShopItem`; 

`total` - общее количество одинаковых объектов (с одинаковыми хэшами). 

Подумайте, как эффективно программно наполнять такой словарь, проходя по списку `lst_in` один раз.
